非常简单的教程,以产生一定范围内的随机数为例,介绍如何用 AWS Lambda + API Gateway 建立一个 serveless API,包括 API 如何传参。
Overview
如果要用一句话理解 API Gateway,那必须是 serverless APIs。AWS API Gateway 与 AWS Lambda 紧密集成,开发者可以通过 API Gateway 创建基于 REST 风格的 API,各种 app 应用调用这些 API,而这些 API 可以通过 AWS Lambda 中运行的代码来调用公开提供的 AWS 服务(or anything you like)。下面两幅图给出了更直观的逻辑。
API Gateway 的优势官方说明说了很多,感觉最大优势除了能够创建完全无服务器的 API 外,值得一提的就是能提供 安全控制机制(security) 和 版本控制(versioning),有兴趣还是看文档吧。
下面来一个简单的例子 randomGenerator,产生 0-10 之间的随机数。网上可以找到一些教程,不过有些并不能 work,有很多坑,感觉是版本问题。主要逻辑就是
相应的,步骤也就是分别配置好 Lambda function 和 API,然后将两者结合起来,结合方法有两种,一是在 Lambda 界面添加 Trigger,连接 API;二是在 API Gateway 界面添加 Lambda function,绑定 Lambda,两种方法都可以。
Example 1: Basic random-number-generator
Lambda Configuration
登录AWS console在 Service 下选择 Lambda
Step1: Create a Lambda function,选 Node.js.4.3, Blank Function
Step 2: Configure Triggers,如果已经配置好了 API Gate,就选择相应的 API name,如果没有,直接默认下一步。
Step 3: Configure Function,进行如下设置,附代码部分
|
|
这里我们不需要验证身份,environment variables 留空就好。Role 如果没有 existing role,可以新建一个。
Step 4: Submit,预览一下如果没问题就 submit,等待一会儿 lambda function 就建好啦。
Step 5: Test,如果在 Step 2 里选择了已经建好的 API Gateway 作为 Trigger,那么可以直接选择 Test 进行测试,也可以通过 url 测试。有可能会遇到 Internal server error,官方说明 response must have statusCode, body, headers,于是把代码改了下,就成功啦。(后来发现好像不改也没关系。。)
|
|
测试结果如下:
相反,如果在 Step 2 里并没有设置 Trigger,我们需要新建 API,请看下一部分 API Gateway Configuration。
API Gateway Configuration
在 aws console 页面的 Services -> Application Service -> API Gateway 下新建 API,然后在 Action 下拉框下 Create Resource,名称可以写 /number,然后继续 Create Method ,选 GET,Lambda Function 选择之前我们已经建好的 random-number-generator
填写完毕后可以直接测试一下,产生了随机数 1。
测试通过就可以部署,Actions -> Deploy API
部署完成后会自动跳转到 Stages 页面,把 Invoke URL 记录下来。
浏览器测试一下,注意补充 sub-resource,这里是 /number。
然后在其他应用里就可以直接通过 url 调用 API 啦~
Example 2: Passing information through API Gateway
API 经常需要传参,那么怎么通过 API Gateway 传递参数呢?比如说我们希望让用户来定义产生随机数的范围,也就是 url 应该是下面这样的
|
|
其实做法也很简单,先修改 Lambda function
|
|
然后在 method 下选择 integration request
修改 Body Mapping Templates,新建 mapping template,添加下面的代码
|
|
然后 Deploy api,浏览器测试下